
    using System.Collections.Generic;
    using System.Data.SqlClient;
    using ADL;
    using ADL.ActivosTableAdapters;
    using AEL.ACT;
    using BEL;
    
    namespace CEL.ACT
    {
    /// <summary>
    /// Acceso a la base de datos
    /// Modulo:Activos ta
    /// Tabla:Act_Activo_Manual
    /// </summary>
    public class DO_Act_Activo_Manual
    {
    #region Adapter
    private Act_Activo_ManualTableAdapter _Adapter;
    /// <summary>
    /// Acceso al Table Adapter de la capa ADL
    /// </summary>
    public Act_Activo_ManualTableAdapter Adapter
    {
    get
    {
    if (_Adapter == null)
    _Adapter = new Act_Activo_ManualTableAdapter();
     return _Adapter;
     }
     }
    #endregion
    #region Obtención de datos
    //Obtencion de datos
    /// <summary>
    /// Obtiene todos los datos de la tabla Act_Activo_Manual
    /// </summary> 
    /// <returns>Lista de objetos Act_Activo_Manual</returns> 
    public List <Act_Activo_Manual> Get ( Scope s )
    {
    string llamada = "";
    List <Act_Activo_Manual> lista= new List <Act_Activo_Manual> ();
    //Extrae los datos
    if(s != null)
    {
    Activos.Act_Activo_ManualDataTable tabla = 
    Adapter.Get (s.Ver_Version_Id ,s.Int_Sucursal_Id);
    //Cuenta  el número  de registros de la tabla
    int numeroRegistros = tabla.Count;
    llamada = "Nombre del Método Utilizado: Get "  + "Parametros  Enviados en el Método: s "  + " Nombre del Store Procedure: " + " Act_Activo_Manual_Get "+ " Número de Registros: " + numeroRegistros;
    //Carga en la lista
      foreach (Activos.Act_Activo_ManualRow fila in tabla)
      lista.Add(new Act_Activo_Manual(

    fila.Id,
    fila.Codigo,
    fila.Estado,
    fila.Act_Activo_Id,
    fila.Act_Ubicacion_Id,
    fila.Valor_Asegurado,
    fila.Valor_Adquisicion,
    fila.Valor_Asignado,
    fila.Valor_Reposicion,
    fila.Base_Amoritizacion,
    fila.Amortizacion_Acumulada,
    fila.Valor_Neto,
    fila.Val_Metodo_Id,
    fila.Periodo_Amortizacion,
    fila.Vida_Util,
    fila.Fecha_Alta,
    fila.Fecha_Inicio_Amortizacion,
    fila.Fecha_Ultimo_Mantenimiento,
    fila.Fecha_Proximo_Mantenimiento,
    fila.Valor_Residual,
    fila.Tiempo_Amortizado,
    fila.Amortiza,
    fila.Act_Ubicacion_Codigo,
    fila.Act_Ubicacion_Nombre,
    fila.Val_Metodo_Codigo,
    fila.Val_Metodo_Nombre,
    fila.Dic_Objeto_Id,
    fila.Dic_Objeto_Codigo,
    fila.Dic_Objeto_Nombre,
    fila.Act_Activo_Codigo,
    fila.Act_Activo_Nombre,
    fila.Act_Grupo_Det_Id,
    fila.Act_Grupo_Det_Codigo,
    fila.Act_Grupo_Det_Nombre,
    fila.Act_Clase_Id,
    fila.Act_Clase_Codigo,
    fila.Act_Clase_Nombre,
    fila.Val_Inversion_Id,
    fila.Val_Inversion_Codigo,
    fila.Val_Inversion_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Porcentaje_Valor_Residual,
    fila.Int_Moneda_Simbolo,
    fila.Periodo_Amortizacion_nombre,
    fila.Amortiza_nombre,
    fila.Estado_Nombre));
      }
      //Devuleve la Lista
      return lista;
      }
      public List <Act_Activo_Manual> GetByActivo( Scope s , string Act_Activo_Id)
          {
          string llamada = "";
          List <Act_Activo_Manual> lista= new List <Act_Activo_Manual> ();
          //Extrae los datos
          if(s != null)
          {
          Activos.Act_Activo_ManualDataTable tabla = 
          Adapter.GetByActivo(s.Ver_Version_Id, s.Int_Sucursal_Id, Act_Activo_Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByActivo" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Int_Sucursal_Id : " + s.Int_Sucursal_Id+ "," + " Act_Activo_Id : " + Act_Activo_Id  + " Nombre del Store Procedure: " + "dbo.Act_Activo_Manual_ByActivo " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Activos.Act_Activo_ManualRow fila in tabla)
          lista.Add(new Act_Activo_Manual(

    fila.Id,
    fila.Codigo,
    fila.Estado,
    fila.Act_Activo_Id,
    fila.Act_Ubicacion_Id,
    fila.Valor_Asegurado,
    fila.Valor_Adquisicion,
    fila.Valor_Asignado,
    fila.Valor_Reposicion,
    fila.Base_Amoritizacion,
    fila.Amortizacion_Acumulada,
    fila.Valor_Neto,
    fila.Val_Metodo_Id,
    fila.Periodo_Amortizacion,
    fila.Vida_Util,
    fila.Fecha_Alta,
    fila.Fecha_Inicio_Amortizacion,
    fila.Fecha_Ultimo_Mantenimiento,
    fila.Fecha_Proximo_Mantenimiento,
    fila.Valor_Residual,
    fila.Tiempo_Amortizado,
    fila.Amortiza,
    fila.Act_Ubicacion_Codigo,
    fila.Act_Ubicacion_Nombre,
    fila.Val_Metodo_Codigo,
    fila.Val_Metodo_Nombre,
    fila.Dic_Objeto_Id,
    fila.Dic_Objeto_Codigo,
    fila.Dic_Objeto_Nombre,
    fila.Act_Activo_Codigo,
    fila.Act_Activo_Nombre,
    fila.Act_Grupo_Det_Id,
    fila.Act_Grupo_Det_Codigo,
    fila.Act_Grupo_Det_Nombre,
    fila.Act_Clase_Id,
    fila.Act_Clase_Codigo,
    fila.Act_Clase_Nombre,
    fila.Val_Inversion_Id,
    fila.Val_Inversion_Codigo,
    fila.Val_Inversion_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Porcentaje_Valor_Residual,
    fila.Int_Moneda_Simbolo,
    fila.Periodo_Amortizacion_nombre,
    fila.Amortiza_nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Act_Activo_Manual> GetByCodigo( Scope s , string Codigo)
          {
          string llamada = "";
          List <Act_Activo_Manual> lista= new List <Act_Activo_Manual> ();
          //Extrae los datos
          if(s != null)
          {
          Activos.Act_Activo_ManualDataTable tabla = 
          Adapter.GetByCodigo(s.Ver_Version_Id,s.Int_Sucursal_Id, Codigo);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetByCodigo" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Int_Sucursal_Id : " + s.Int_Sucursal_Id+ "," + " Codigo : " + Codigo  + " Nombre del Store Procedure: " + "dbo.Act_Activo_Manual_ByCodigo " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Activos.Act_Activo_ManualRow fila in tabla)
          lista.Add(new Act_Activo_Manual(

    fila.Id,
    fila.Codigo,
    fila.Estado,
    fila.Act_Activo_Id,
    fila.Act_Ubicacion_Id,
    fila.Valor_Asegurado,
    fila.Valor_Adquisicion,
    fila.Valor_Asignado,
    fila.Valor_Reposicion,
    fila.Base_Amoritizacion,
    fila.Amortizacion_Acumulada,
    fila.Valor_Neto,
    fila.Val_Metodo_Id,
    fila.Periodo_Amortizacion,
    fila.Vida_Util,
    fila.Fecha_Alta,
    fila.Fecha_Inicio_Amortizacion,
    fila.Fecha_Ultimo_Mantenimiento,
    fila.Fecha_Proximo_Mantenimiento,
    fila.Valor_Residual,
    fila.Tiempo_Amortizado,
    fila.Amortiza,
    fila.Act_Ubicacion_Codigo,
    fila.Act_Ubicacion_Nombre,
    fila.Val_Metodo_Codigo,
    fila.Val_Metodo_Nombre,
    fila.Dic_Objeto_Id,
    fila.Dic_Objeto_Codigo,
    fila.Dic_Objeto_Nombre,
    fila.Act_Activo_Codigo,
    fila.Act_Activo_Nombre,
    fila.Act_Grupo_Det_Id,
    fila.Act_Grupo_Det_Codigo,
    fila.Act_Grupo_Det_Nombre,
    fila.Act_Clase_Id,
    fila.Act_Clase_Codigo,
    fila.Act_Clase_Nombre,
    fila.Val_Inversion_Id,
    fila.Val_Inversion_Codigo,
    fila.Val_Inversion_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Porcentaje_Valor_Residual,
    fila.Int_Moneda_Simbolo,
    fila.Periodo_Amortizacion_nombre,
    fila.Amortiza_nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
          public List <Act_Activo_Manual> GetById( Scope s , string Id)
          {
          string llamada = "";
          List <Act_Activo_Manual> lista= new List <Act_Activo_Manual> ();
          //Extrae los datos
          if(s != null)
          {
          Activos.Act_Activo_ManualDataTable tabla = 
          Adapter.GetById(s.Ver_Version_Id,s.Int_Sucursal_Id, Id);
          //Cuenta  el número  de registros de la tabla
          int numeroRegistros = tabla.Count;
          llamada = "Nombre del Método Utilizado: " + " GetById" + " Parametros  Enviados en el Método: "+ "," + " s.Ver_Version_Id : " + s.Ver_Version_Id+ "," + " Int_Sucursal_Id : " + s.Int_Sucursal_Id+ "," + " Id : " + Id  + " Nombre del Store Procedure: " + "dbo.Act_Activo_Manual_ById " + " Número de Registros: " + numeroRegistros;
          //Carga en la lista
          foreach (Activos.Act_Activo_ManualRow fila in tabla)
          lista.Add(new Act_Activo_Manual(

    fila.Id,
    fila.Codigo,
    fila.Estado,
    fila.Act_Activo_Id,
    fila.Act_Ubicacion_Id,
    fila.Valor_Asegurado,
    fila.Valor_Adquisicion,
    fila.Valor_Asignado,
    fila.Valor_Reposicion,
    fila.Base_Amoritizacion,
    fila.Amortizacion_Acumulada,
    fila.Valor_Neto,
    fila.Val_Metodo_Id,
    fila.Periodo_Amortizacion,
    fila.Vida_Util,
    fila.Fecha_Alta,
    fila.Fecha_Inicio_Amortizacion,
    fila.Fecha_Ultimo_Mantenimiento,
    fila.Fecha_Proximo_Mantenimiento,
    fila.Valor_Residual,
    fila.Tiempo_Amortizado,
    fila.Amortiza,
    fila.Act_Ubicacion_Codigo,
    fila.Act_Ubicacion_Nombre,
    fila.Val_Metodo_Codigo,
    fila.Val_Metodo_Nombre,
    fila.Dic_Objeto_Id,
    fila.Dic_Objeto_Codigo,
    fila.Dic_Objeto_Nombre,
    fila.Act_Activo_Codigo,
    fila.Act_Activo_Nombre,
    fila.Act_Grupo_Det_Id,
    fila.Act_Grupo_Det_Codigo,
    fila.Act_Grupo_Det_Nombre,
    fila.Act_Clase_Id,
    fila.Act_Clase_Codigo,
    fila.Act_Clase_Nombre,
    fila.Val_Inversion_Id,
    fila.Val_Inversion_Codigo,
    fila.Val_Inversion_Nombre,
    fila.Int_Empresa_Id,
    fila.Int_Empresa_Codigo,
    fila.Int_Empresa_Nombre,
    fila.Creacion_Per_Personal_Id,
    fila.Creacion_Per_Personal_Codigo,
    fila.Creacion_Per_Personal_Nombre,
    fila.Update_Per_Personal_Id,
    fila.Update_Per_Personal_Codigo,
    fila.Update_Per_Personal_Nombre,
    fila.Porcentaje_Valor_Residual,
    fila.Int_Moneda_Simbolo,
    fila.Periodo_Amortizacion_nombre,
    fila.Amortiza_nombre,
    fila.Estado_Nombre));
          }
          //Realiza la auditoria
          Auditar.Registro(s, llamada, lista, Textos._AUDITAR_ACCION_SELECT_SEL);
          //Devuleve la Lista
          return lista;
          }
                  #endregion
    #region Operaciones con datos
    
    //Inserta
    /// <summary>
    /// Inserta el objeto en la tabla Act_Activo_Manual
    /// </summary>
    /// <param name="s">Variables de ámbito como la versión y la sucursal</param>
    // <returns></returns>
    public string Insert(Scope s, Act_Activo_Manual o)
    {
    // Genera un nuevo Id, codigo y estado.
    o.GenNewId(s.Int_Sucursal_Numero);
    o.GenCodigo(s.Ver_Version_Id);
    o.GenEstado();
    // Controla el error de clave primaria duplicada.
        o.Int_Empresa_Id = s.Int_Empresa_Id;
    try
    {
    Adapter.Insert(

          o.Id,
          o.Codigo,
          o.Act_Activo_Id,
          o.Act_Ubicacion_Id,
          o.Valor_Asegurado,
          o.Valor_Adquisicion,
          o.Valor_Asignado,
          o.Valor_Reposicion,
          o.Base_Amoritizacion,
          o.Amortizacion_Acumulada,
          o.Valor_Neto,
          o.Val_Metodo_Id,
          o.Periodo_Amortizacion,
          o.Vida_Util,
          o.Fecha_Alta,
          o.Fecha_Inicio_Amortizacion,
          o.Fecha_Ultimo_Mantenimiento,
          o.Fecha_Proximo_Mantenimiento,
          o.Valor_Residual,
          o.Tiempo_Amortizado,
          o.Amortiza,
          o.Estado
    );
    }
    catch (SqlException e)
    {
        System.Exception eCaso;
        System.Exception otroEX;

        switch (e.Number)
        {
            // Si el error es de violación PK, entonces repite.
            case 2627:
                string mensaje = e.Errors[0].Message;
                if (mensaje.StartsWith(Textos._ERR_VIOLATION_UNIQUE_KEY))
                    return Insert(s, o);
                else
                {

                    if (e.Message.Contains(TXT_BDD._IX_Act_Activo_Manual_Codigo))
                    {
                        eCaso = new System.Exception("");
                        otroEX = new System.Exception(TXT_Mensajes._MSJ32, eCaso);
                        throw (otroEX);
                    }
                    if (e.Message.Contains(TXT_BDD._IX_Act_Activo_Manual_Activo_Id))
                    {
                        eCaso = new System.Exception("");
                        otroEX = new System.Exception(TXT_Mensajes._MSJ37, eCaso);
                        throw (otroEX);
                    }
                    eCaso = new System.Exception(e.Message);
                    otroEX = new System.Exception(TXT_Mensajes._MSJ34, eCaso);
                    throw (otroEX);
                }
                break;
            default:
                eCaso = new System.Exception(e.Message);
                otroEX = new System.Exception(TXT_Mensajes._MSJ34, eCaso);
                throw (otroEX);
        }
    }
    //Control de Auditoria
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_INSERT);
    //Retorna el Id Insetado
     return o.Id;
    }
    // Borra
    /// <summary>
    /// Borra el objeto de la tabla Act_Activo_Manual
    ///</summary>
     /// <param name="o">Objeto a actualizar</param>
    /// <returns></returns>
    public int Delete(Scope s,  Act_Activo_Manual o)
    {
        int resultado = 0;
        try
        {
            resultado = Adapter.Delete(

          o.Id,
          o.Codigo,
          o.Act_Activo_Id,
          o.Act_Ubicacion_Id,
          o.Valor_Asegurado,
          o.Valor_Adquisicion,
          o.Valor_Asignado,
          o.Valor_Reposicion,
          o.Base_Amoritizacion,
          o.Amortizacion_Acumulada,
          o.Valor_Neto,
          o.Val_Metodo_Id,
          o.Periodo_Amortizacion,
          o.Vida_Util,
          o.Fecha_Alta,
          o.Fecha_Inicio_Amortizacion,
          o.Fecha_Ultimo_Mantenimiento,
          o.Fecha_Proximo_Mantenimiento,
          o.Valor_Residual,
          o.Tiempo_Amortizado,
          o.Amortiza,
          o.Estado
                     );
        }
        catch (SqlException e)
        {
            System.Exception eCaso;
            System.Exception otroEX;

            eCaso = new System.Exception(e.Message);
            otroEX = new System.Exception(TXT_Mensajes._MSJ34, eCaso);
            throw (otroEX);
        }
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_DELETE);
    return resultado;
    }//Actualiza
    /// <summary>
    //Actualiza la tabla Act_Activo_Manual
    /// </summary>
    /// <param name="o">Objeto que contiene la información a actualizar</param>
    /// <param name="original">Original para concurrencia optimista</param> 
    /// <returns></returns>
    public int Update(Scope s, Act_Activo_Manual o, Act_Activo_Manual original)
    {
    int resultado=0;
        try
        {
            resultado = Adapter.Update(

          o.Id,
          o.Codigo,
          o.Act_Activo_Id,
          o.Act_Ubicacion_Id,
          o.Valor_Asegurado,
          o.Valor_Adquisicion,
          o.Valor_Asignado,
          o.Valor_Reposicion,
          o.Base_Amoritizacion,
          o.Amortizacion_Acumulada,
          o.Valor_Neto,
          o.Val_Metodo_Id,
          o.Periodo_Amortizacion,
          o.Vida_Util,
          o.Fecha_Alta,
          o.Fecha_Inicio_Amortizacion,
          o.Fecha_Ultimo_Mantenimiento,
          o.Fecha_Proximo_Mantenimiento,
          o.Valor_Residual,
          o.Tiempo_Amortizado,
          o.Amortiza,
          o.Estado,
          original.Id,
          original.Codigo,
          original.Act_Activo_Id,
          original.Act_Ubicacion_Id,
          original.Valor_Asegurado,
          original.Valor_Adquisicion,
          original.Valor_Asignado,
          original.Valor_Reposicion,
          original.Base_Amoritizacion,
          original.Amortizacion_Acumulada,
          original.Valor_Neto,
          original.Val_Metodo_Id,
          original.Periodo_Amortizacion,
          original.Vida_Util,
          original.Fecha_Alta,
          original.Fecha_Inicio_Amortizacion,
          original.Fecha_Ultimo_Mantenimiento,
          original.Fecha_Proximo_Mantenimiento,
          original.Valor_Residual,
          original.Tiempo_Amortizado,
          original.Amortiza,
          original.Estado
     );
        }
        catch (SqlException e)
        {
            System.Exception eCaso;
            System.Exception otroEX;

            if (e.Message.Contains(TXT_BDD._IX_Act_Activo_Manual_Codigo))
            {
                eCaso = new System.Exception("");
                otroEX = new System.Exception(TXT_Mensajes._MSJ32, eCaso);
                throw (otroEX);
            }
            if (e.Message.Contains(TXT_BDD._IX_Act_Activo_Manual_Activo_Id))
            {
                eCaso = new System.Exception("");
                otroEX = new System.Exception(TXT_Mensajes._MSJ37, eCaso);
                throw (otroEX);
            }
            eCaso = new System.Exception(e.Message);
            otroEX = new System.Exception(TXT_Mensajes._MSJ34, eCaso);
            throw (otroEX);
        }
       
    Auditar.Registro(s, o, Textos._AUDITAR_ACCION_UPDATE);
    return resultado;
    }
    #endregion
    }
    }
